package cron.core.scheduler;

import cron.core.scheduler.trigger.TriggerType;
import cron.task.plugin.Task;

/**
 * 定时任务调度器
 *
 * @author : willian fu
 * @version : 1.0
 * @date : 2021/2/25 0025 12:40
 */
public interface Scheduler {

    /**
     * 启动任务
     *
     * @param triggerId 触发器实例ID
     */
    void enable(String triggerId);

    /**
     * 停止任务
     *
     * @param triggerId 触发器实例ID
     */
    void disable(String triggerId);

    /**
     * 像时间轮注册一个任务
     *
     * @param task 任务实例
     * @param type 任务触发器类型
     * @param val  任务调度计划
     * @return 任务调度实例ID
     */
    String register(Task task, TriggerType type, Object val);

    /**
     * 更新调度计划
     *
     * @param triggerId 触发器实例ID
     * @param rule      待更新的规则
     */
    void updatePlan(String triggerId, Object rule);


}
